package edu.tfh.s2.ehkbot.inventar;

import java.io.Serializable;

import edu.tfh.s2.ehkbot.gerete.sensoren.Bild;
import edu.tfh.s2.ehkbot.steuerung.Positionierbar;

/**
 * Die Klasse Ware beschreibt die Eigenschaften einer Ware.
 * 
 * @author s2zehn
 */
public class Ware extends Positionierbar implements Serializable {
	/**
	 * Beschreibt das Pyhsik der Ware.
	 */
	public enum Beschafenheit {
		FEST, GLAESERN, LUFTDURCHLAESSIG, MAGNETISCH, UNBEKANNT, ZERBRAECHLICH
	}

	private static final long serialVersionUID = -9060078955083813050L;

	private int barcode;
	private Beschafenheit[] beschafenheit;
	private Bild bild;
	private int gewicht;
	private int[] groesse;

	private String name;

	/**
	 * Konstruktor für Ware.
	 * 
	 * @param name
	 *            Der Name der Ware.
	 * @param gewicht
	 *            Das Gewicht der Ware [g].
	 * @param groesse
	 *            Die Größe der Ware als Array von 3 Elementen (xyz) [mm].
	 * @param barcode
	 *            Der Barcode der Ware.
	 * @param beschafenheit
	 *            Ein Array von Beschafenheiten.
	 * @param bild
	 *            Das Bild der Ware.
	 */
	public Ware(String name, int gewicht, int[] groesse, int barcode, Beschafenheit[] beschafenheit, Bild bild) {
		this.name = name;
		this.gewicht = gewicht;
		this.barcode = barcode;
		this.groesse = groesse.clone();
		this.beschafenheit = beschafenheit.clone();
		this.bild = bild;
	}

	/**
	 * Liefert den Barcode der Ware.
	 * 
	 * @return Der Barcode.
	 */
	public int getBarcode() {
		return barcode;
	}

	/**
	 * Liefert die Beschafenheiten der Ware.
	 * 
	 * @return Die Ware.
	 */
	public Beschafenheit[] getBeschafenheit() {
		return beschafenheit;
	}

	/**
	 * Liefert das Bild der Ware.
	 * 
	 * @return Die Ware.
	 */
	public Bild getBild() {
		return bild;
	}

	/**
	 * Liefert das Gewicht.
	 * 
	 * @return Das Gewicht [g].
	 */
	public int getGewicht() {
		return gewicht;
	}

	/**
	 * Liefert die Größe der Ware.
	 * 
	 * @return Die Größe als Array von 3 Elementen (xyz) [mm].
	 */
	public int[] getGrosse() {
		return groesse;
	}

	/**
	 * Liefert den Namen der Ware.
	 * 
	 * @return Der Name.
	 */
	public String getName() {
		return name;
	}

	/**
	 * Setzt die Beschafenheite
	 * 
	 * @param beschafenheit
	 *            Ein Array von Beschafenheiten.
	 */
	public void setBeschafenheit(Beschafenheit[] beschafenheit) {
		this.beschafenheit = beschafenheit;
	}
}